diff options
Diffstat (limited to 'app/[lng]')
7 files changed, 72 insertions, 27 deletions
diff --git a/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx b/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx index 2260396c..e8433c55 100644 --- a/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx +++ b/app/[lng]/evcp/(evcp)/vendor-regular-registrations/page.tsx @@ -1,5 +1,7 @@ import * as React from "react"
+export const dynamic = "force-dynamic"
+
import { Skeleton } from "@/components/ui/skeleton"
import { DataTableSkeleton } from "@/components/data-table/data-table-skeleton"
@@ -27,9 +29,9 @@ export default async function VendorRegularRegistrationsPage() { </h2>
<InformationButton pagePath="evcp/vendor-regular-registrations" />
</div>
- <p className="text-muted-foreground">
+ {/* <p className="text-muted-foreground">
정규업체 등록 현황을 확인하세요. 구매담당자가 정규업체 등록을 위한 현황 조회 및 협력업체에게 누락자료 요청하는 화면입니다.
- </p>
+ </p> */}
</div>
</div>
</div>
diff --git a/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx b/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx index e3cda9b4..7c38d5cf 100644 --- a/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx +++ b/app/[lng]/partners/(partners)/document-list-only/[contractId]/page.tsx @@ -6,6 +6,7 @@ import { type SearchParams } from "@/types/table" import { getValidFilters } from "@/lib/data-table" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Progress } from "@/components/ui/progress" +import { useTranslation } from "@/i18n" import { TrendingUp, AlertTriangle, @@ -22,6 +23,7 @@ import { getDocumentProgressStats, getDocumentStagesOnly } from "@/lib/vendor-do interface DocumentStagesManagementPageProps { params: { + lng?: string contractId: string } searchParams: Promise<SearchParams> @@ -29,14 +31,15 @@ interface DocumentStagesManagementPageProps { // 전체 진행률 카드 컴포넌트 -async function ProgressCard({ contractId }: { contractId: number }) { +async function ProgressCard({ contractId, lng }: { contractId: number, lng: string }) { const stats = await getDocumentProgressStats(contractId) + const { t } = await useTranslation(lng, 'engineering') return ( <Card> <CardHeader> <div className="flex items-center justify-between"> - <CardTitle className="text-lg">전체 진행률</CardTitle> + <CardTitle className="text-lg">{t('vendorDocuments.progress.overallProgress')}</CardTitle> <div className="flex items-center gap-2"> </div> </div> @@ -44,7 +47,7 @@ async function ProgressCard({ contractId }: { contractId: number }) { <CardContent> <div className="space-y-4"> <div className="flex justify-between text-sm"> - <span>평균 진행률</span> + <span>{t('vendorDocuments.progress.averageProgress')}</span> <span className="font-medium">{stats.avgProgress}%</span> </div> <Progress value={stats.avgProgress} className="w-full" /> @@ -52,19 +55,19 @@ async function ProgressCard({ contractId }: { contractId: number }) { <div className="grid grid-cols-2 md:grid-cols-4 gap-4 text-sm"> <div className="text-center p-2 bg-gray-50 rounded"> <div className="font-medium text-lg text-gray-900">{stats.totalDocuments}</div> - <div className="text-gray-600">전체</div> + <div className="text-gray-600">{t('vendorDocuments.progress.total')}</div> </div> <div className="text-center p-2 bg-green-50 rounded"> <div className="font-medium text-lg text-green-600">{stats.completedDocuments}</div> - <div className="text-green-600">완료</div> + <div className="text-green-600">{t('vendorDocuments.progress.completed')}</div> </div> <div className="text-center p-2 bg-blue-50 rounded"> <div className="font-medium text-lg text-blue-600">{stats.inProgressDocuments}</div> - <div className="text-blue-600">진행중</div> + <div className="text-blue-600">{t('vendorDocuments.progress.inProgress')}</div> </div> <div className="text-center p-2 bg-red-50 rounded"> <div className="font-medium text-lg text-red-600">{stats.overdueDocuments}</div> - <div className="text-red-600">지연</div> + <div className="text-red-600">{t('vendorDocuments.progress.overdue')}</div> </div> </div> </div> @@ -139,14 +142,16 @@ export default async function DocumentStagesManagementPage({ searchParams }: DocumentStagesManagementPageProps) { const resolvedParams = await params + const lng = resolvedParams?.lng || 'ko' const contractId = Number(resolvedParams.contractId) const resolvedSearchParams = await searchParams + const { t } = await useTranslation(lng, 'engineering') // 프로젝트 타입 결정 (실제로는 계약 정보에서 가져와야 함) const projectType = resolvedSearchParams.projectType === "plant" ? "plant" : "ship" if (isNaN(contractId)) { - throw new Error("유효하지 않은 계약 ID입니다") + throw new Error(t('vendorDocuments.errors.invalidContractId')) } return ( diff --git a/app/[lng]/partners/(partners)/document-list-only/page.tsx b/app/[lng]/partners/(partners)/document-list-only/page.tsx index 721eb408..fe7cf47a 100644 --- a/app/[lng]/partners/(partners)/document-list-only/page.tsx +++ b/app/[lng]/partners/(partners)/document-list-only/page.tsx @@ -1,18 +1,24 @@ // app/vendor-data/page.tsx import * as React from "react" import { Separator } from "@/components/ui/separator" +import { useTranslation } from "@/i18n" -export default async function IndexPage() { +interface Props { + params: { lng?: string } +} + +export default async function IndexPage({ params }: Props) { + const { lng } = await params + const language = lng || 'ko' + const { t } = await useTranslation(language, 'engineering') return ( <div className="space-y-6"> <div className="grid gap-4"> <div className="rounded-lg border p-4"> - <h4 className="text-sm font-medium">시작하는 방법</h4> + <h4 className="text-sm font-medium">{t('vendorDocuments.gettingStarted.title')}</h4> <p className="text-sm text-muted-foreground mt-1"> - 오른쪽 상단에서 프로젝트/계약을 선택하세요.<br /> - - + {t('vendorDocuments.gettingStarted.selectProject')} </p> </div> </div> diff --git a/app/[lng]/partners/(partners)/document-list/page.tsx b/app/[lng]/partners/(partners)/document-list/page.tsx index 721eb408..fe7cf47a 100644 --- a/app/[lng]/partners/(partners)/document-list/page.tsx +++ b/app/[lng]/partners/(partners)/document-list/page.tsx @@ -1,18 +1,24 @@ // app/vendor-data/page.tsx import * as React from "react" import { Separator } from "@/components/ui/separator" +import { useTranslation } from "@/i18n" -export default async function IndexPage() { +interface Props { + params: { lng?: string } +} + +export default async function IndexPage({ params }: Props) { + const { lng } = await params + const language = lng || 'ko' + const { t } = await useTranslation(language, 'engineering') return ( <div className="space-y-6"> <div className="grid gap-4"> <div className="rounded-lg border p-4"> - <h4 className="text-sm font-medium">시작하는 방법</h4> + <h4 className="text-sm font-medium">{t('vendorDocuments.gettingStarted.title')}</h4> <p className="text-sm text-muted-foreground mt-1"> - 오른쪽 상단에서 프로젝트/계약을 선택하세요.<br /> - - + {t('vendorDocuments.gettingStarted.selectProject')} </p> </div> </div> diff --git a/app/[lng]/partners/(partners)/registration-status/page.tsx b/app/[lng]/partners/(partners)/registration-status/page.tsx new file mode 100644 index 00000000..21bcea59 --- /dev/null +++ b/app/[lng]/partners/(partners)/registration-status/page.tsx @@ -0,0 +1,24 @@ +import * as React from "react"
+import { Suspense } from "react"
+
+import { Skeleton } from "@/components/ui/skeleton"
+import { Shell } from "@/components/shell"
+import { VendorRegistrationStatusView } from "@/lib/vendor-registration-status/vendor-registration-status-view"
+
+export default async function VendorRegistrationStatusPage() {
+ return (
+ <Shell className="gap-4">
+ <Suspense
+ fallback={
+ <div className="space-y-4">
+ <Skeleton className="h-10 w-full" />
+ <Skeleton className="h-64 w-full" />
+ <Skeleton className="h-32 w-full" />
+ </div>
+ }
+ >
+ <VendorRegistrationStatusView />
+ </Suspense>
+ </Shell>
+ )
+}
diff --git a/app/[lng]/partners/(partners)/vendor-data/layout.tsx b/app/[lng]/partners/(partners)/vendor-data/layout.tsx index 9621d23f..c37a983a 100644 --- a/app/[lng]/partners/(partners)/vendor-data/layout.tsx +++ b/app/[lng]/partners/(partners)/vendor-data/layout.tsx @@ -11,7 +11,7 @@ import { useTranslation } from "@/i18n" interface VendorDataLayoutProps { children: React.ReactNode - params?: { locale?: string } + params: { lng?: string } } // Layout 컴포넌트는 서버 컴포넌트입니다 @@ -20,8 +20,9 @@ export default async function VendorDataLayout({ params, }: VendorDataLayoutProps) { // 기본 언어는 'ko'로 설정, params.locale이 있으면 사용 - const lng = params?.locale || 'ko' - const { t } = await useTranslation(lng, 'engineering') + const { lng } = await params; + const language = lng || 'en' + const { t } = await useTranslation(language, 'engineering') const session = await getServerSession(authOptions) const vendorId = session?.user.companyId diff --git a/app/[lng]/partners/(partners)/vendor-data/page.tsx b/app/[lng]/partners/(partners)/vendor-data/page.tsx index db032377..0fbb6f0a 100644 --- a/app/[lng]/partners/(partners)/vendor-data/page.tsx +++ b/app/[lng]/partners/(partners)/vendor-data/page.tsx @@ -3,13 +3,14 @@ import { Separator } from "@/components/ui/separator" import { useTranslation } from "@/i18n" interface Props { - params: { locale?: string } + params: { lng?: string } } export default async function VendorDataPage({ params }: Props) { - // 기본 언어는 'ko'로 설정, params.locale이 있으면 사용 - const lng = params?.locale || 'ko' - const { t } = await useTranslation(lng, 'engineering') + // 기본 언어는 'ko'로 설정, params.lng이 있으면 사용 + const { lng } = await params + const language = lng || 'en' + const { t } = await useTranslation(language, 'engineering') return ( <div className="space-y-6"> |
